package com.sinogrand.elevator.utils

import android.content.Context
import android.content.SharedPreferences
import android.util.Log
import com.sinogrand.elevator.data.models.UserInfo
import com.google.gson.Gson

class TokenManager(context: Context) {
    private val prefs: SharedPreferences = context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE)
    private val gson = Gson()
    
    companion object {
        private const val TOKEN_KEY = "user_token"
        private const val USER_INFO_KEY = "user_info"
    }
    
    // 保存token和用户信息（保持向后兼容）
    fun saveTokenAndUserInfo(token: String, userInfo: UserInfo) {
        Log.d(LogTags.TOKEN_MANAGER, "保存用户token和用户信息: userId=${userInfo.id}, real_name=${userInfo.real_name}")
        prefs.edit().apply {
            putString(TOKEN_KEY, token)
            putString(USER_INFO_KEY, gson.toJson(userInfo))
            apply()
        }
    }
    
    // 只保存token
    fun saveToken(token: String) {
        Log.d(LogTags.TOKEN_MANAGER, "保存token: ${token.take(20)}...")
        prefs.edit().apply {
            putString(TOKEN_KEY, token)
            apply()
        }
    }
    
    // 只保存用户信息
    fun saveUserInfo(userInfo: UserInfo) {
        Log.d(LogTags.TOKEN_MANAGER, "保存用户信息: userId=${userInfo.id}, real_name=${userInfo.real_name}")
        prefs.edit().apply {
            putString(USER_INFO_KEY, gson.toJson(userInfo))
            apply()
        }
    }
    
    fun getToken(): String {
        return prefs.getString(TOKEN_KEY, "") ?: ""
    }
    
    fun getUserInfo(): UserInfo? {
        val userInfoJson = prefs.getString(USER_INFO_KEY, null)
        return if (userInfoJson != null) {
            try {
                gson.fromJson(userInfoJson, UserInfo::class.java)
            } catch (e: Exception) {
                null
            }
        } else {
            null
        }
    }
    
    fun isLoggedIn(): Boolean {
        return !getToken().isEmpty()
    }
    
    // 检查是否有token
    fun hasToken(): Boolean {
        return !getToken().isEmpty()
    }
    
    // 检查是否有用户信息
    fun hasUserInfo(): Boolean {
        return getUserInfo() != null
    }
    
    // 清空所有用户信息（包括token和userInfo）
    fun clearUserInfo() {
        Log.d(LogTags.TOKEN_MANAGER, "清空所有用户信息")
        prefs.edit().apply {
            remove(TOKEN_KEY)
            remove(USER_INFO_KEY)
            apply()
        }
    }
    
    // 只清空token
    fun clearTokenOnly() {
        Log.d(LogTags.TOKEN_MANAGER, "清空token")
        prefs.edit().apply {
            remove(TOKEN_KEY)
            apply()
        }
    }
    
    // 只清空用户信息
    fun clearUserInfoOnly() {
        Log.d(LogTags.TOKEN_MANAGER, "清空用户信息")
        prefs.edit().apply {
            remove(USER_INFO_KEY)
            apply()
        }
    }
    
    // 保持向后兼容的方法
    fun getUserId(): String? {
        return getUserInfo()?.id?.toString()
    }
    
    fun getUsername(): String? {
        return getUserInfo()?.real_name
    }
}
